Many modern software applications display three-dimensional representations of graphical objects and scenes as part of a user interface. Three-dimensional (3D) graphics are used in a wide range of applications including video games, simulations, virtual reality applications, geospatial information applications, and applications for mapping and navigation. In many applications, 3D graphics are more useful than two-dimensional (2D) graphics at depicting real-world environments and locations because the normal interaction between humans and the real-world occurs in three dimensions.
In one form of 3D graphics, different objects in a scene are formed from a large number of polygons. The polygons form shapes and structures in a 3D scene. Since most computing devices only display graphics with a two-dimensional display, the 3D graphics are converted into a rasterized array of two-dimensional pixels for display. The 2D display depicts portions of the three-dimensional scene in a manner similar to a camera taking a two-dimensional photograph of 3D scenes in the real world. Many 3D graphics systems and application programming interfaces (APIs) including the Open Graphics Library (OpenGL) and the Direct 3D APIs provide common structures and interfaces to specialized graphics hardware for generation of 3D images in an efficient manner. The 3D software interacts with general purpose and specialized digital computing hardware that generates the 3D graphics in an efficient manner. In particular, graphical processing units (GPUs) are hardware components that are configured to generate polygons and other graphical effects that form a 3D scene. Modern computing devices typically execute software with a combination of instructions for a central processing unit (CPU) and a GPU to generate the 3D scene and enable interaction with the 3D scene in some software applications. In some hardware embodiments, the functionality of the CPU and GPU are merged together, physically and optionally logically, into a single a system on a chip (SoC) device.
As the computational power and sophistication of digital computing hardware and software have increased, the use of 3D graphics has expanded to a wide range of applications. For example, many motor vehicles include in-vehicle information systems with computer systems that include the hardware and software systems for the display of 3D graphics. Modern motor vehicles often include one or more cameras and video display devices that display video of the environment surrounding the vehicle for assisting the vehicle operator in driving and parking the vehicle. While existing systems typically show video from a single camera with a two-dimensional view of the environment outside the vehicle, a 3D graphics implementation composites multiple photographs from one or more cameras in the vehicle to generate a 3D view of the environment around the vehicle. The 3D graphics view can include animation of the environment around the vehicle as the vehicle moves and as objects in the field of view of the cameras move. One challenge in generating a 3D environment is that the composition of 2D pictures from the cameras often results in an inaccurate rendering of the 3D environment. For example, if the vehicle is parking next to a mailbox on a side of a street, the mailbox is much closer to the vehicle than surrounding buildings or other features in the environment. The depiction of the 3D environment, however, projects both the mailbox and all other features onto a uniform 3D surface, such as a “fishbowl” hemispherical surface. The resulting 3D images include the objects in the photographs, but the 3D scenes do not provide realistic depth perception of objects surrounding the vehicle to the vehicle operator. Consequently, improvements to in-vehicle information systems that enable more realistic 3D representations of physical environments around the vehicle would be beneficial.